package com.huang.leetcode.stack;

import java.util.Stack;

/**
 * @Author：CreateSequence
 * @Date：2020-08-01 11:50
 * @Description：最小栈
 */
public class PB155 {

    /**
     * 1.创建一个元素栈和一个用于存放最小元素的辅助栈
     * 2.当元素入栈的时候：
     * 2.1 如果栈为空就让元素同时也入辅助栈
     * 2.2 如果栈不为空，就比较新元素和辅助栈栈顶元素的大小，如果新元素小就也入辅助栈，否则只入栈
     * 3.当元素出栈的时候：如果栈顶元素和辅助栈栈顶元素相同，就同时出栈，否则只出栈
     */
    class MinStack {

        Stack<Integer> stack;
        Stack<Integer> minStack;

        /** initialize your data structure here. */
        public MinStack() {
            stack = new Stack<>();
            minStack = new Stack<>();
        }

        public void push(int x) {
            stack.push(x);
            if (minStack.isEmpty()) {
                minStack.push(x);
            }else {
                int min = minStack.peek();
                if (min >= x) {
                    minStack.push(x);
                }
            }
        }

        public void pop() {
            int top = stack.pop();
            int minTop = minStack.peek();
            if (top == minTop) {
                minStack.pop();
            }
        }

        public int top() {
            return stack.peek();
        }

        public int getMin() {
            return minStack.peek();
        }
    }

}
